import xml2js from 'xml2js'
import  template  from './tpl';
//将xml转成js对象
function paresXML (xml){
    return new Promise((res,rej)=>{
        xml2js.parseString(xml,{trim:true,explicitArray:false},(err,cont)=>{
            if(err) rej(err)
            res(cont)
        })
    })
}
//处理消息
function formatMessage(res){
    const message = {} //将消息初始化成对象
    if(typeof res === 'object'){    //判断res是否是个对象，如果不是对象返回message为空对象
        const keys = Object.keys(res)
        for (let k = 0; k < keys.length; k++) {  
            const key = keys[k];        //找到key val
            const element = res[key];
            if(!(element instanceof Array)||element.length===0){    //如果子元素不是数组，则忽略
                continue
            }

            if(element.length === 1){                               //如果子元素是数组，则判断数组的大小，如果为1，则表示该res中的命令为1个
               if( typeof element[0] === 'object'){                 //继续判断子元素数组中的类型是否为对象。
                   message[key] = formatMessage(element[0])         //如果子元素中的类型为对象，则需要继续查看该对象中的内容，这里递归处理。
               }else {
                   message[key] = (element[0]||'').trim()   //如果不为对象，去掉空值
               }
            }else{
                message[key] = []                                   //如果子元素为多个数组。则遍历数组，对数组中的每一元素递归

                for (let index = 0; index < element.length; index++) {
                     message[key].push(formatMessage(element[index]));
                    
                }
            }
        }
    }
    return message  //拿到处理后的res，这是res是一个处理完善的对象
}




function tpl(cont,msg){
    
    let type = ''
    if (Array.isArray(cont)){
        type = 'news'
    }

    if (!cont){
        cont = 'Enpty News'
        
    }
    type = cont.type || type

    let info =Object.assign({},{
        content: cont,
        createTime: new Date().getTime(),
        msgType: type ||'text',
        toUserName: msg.FromUserName,
        fromUserName: msg.ToUserName
    })
    console.log('info',info)
    return template(info)

}
export {
    formatMessage,
    paresXML,
    tpl
}